<?php
/// 函数名称：dh_backup_db 
/// 函数作用：定时备份数据库
/// 函数作者: DH
/// 作者地址: http://dhblog.org/

$dh_backup_db = get_option('dh_backup_db');
$interal = 3600*24*7; //定义一个礼拜执行一次
//如果没有定义options就定义
if (!$dh_backup_db) {
	//执行的时间按照第一次执行的时间为基础，因为无法精确，所以不定义具体执行的时间点
	$dh_backup_db = time();//最后一次执行的日期
	update_option('dh_backup_db', $dh_backup_db);	
}
 
//在主题被切换的时候，清除设置
function dh_del_backup_db(){
	delete_option('dh_backup_db');
} 
add_action('switch_theme',dh_del_backup_db);

$now = time(); // 现在
$next_check = (int)$dh_backup_db + $interal;

//如果到了时间执行的时间
if ($next_check <= $now) 
{
    // 备份路径
    $key = substr(md5(DB_NAME), -10);
    $file_dir = ABSPATH . "wp-content/themes/dhchannel/functions/backup_$key/";
	if(!file_exists($file_dir))//判断文件夹是否存在
	{
		mkdir($file_dir,0777);
		@chmod($file_dir,0777);
	}
    $filename = DB_NAME . '-' . gmdate('ymd', time() + get_option('gmt_offset')*3600) . '-'. time().'.sql';
    if (@function_exists('gzencode')) 
		$filename .= '.gz'; // gzip

    if (!is_file($file_dir.$filename)) 
	{    
		// 导出数据库
		$table_name_array = $wpdb->get_col('SHOW TABLES'); // 查询所有表名
		include('dh_backup_db_sql-dump.php'); 

		// 邮寄数据库备份
		global $phpmailer; // 採用 phpmailer 方式
		class_exists('PHPMailer') or require(ABSPATH . WPINC . '/class-phpmailer.php');
		$phpmailer = new PHPMailer();
		$phpmailer->AddAddress( get_option('admin_email') ); // 可改另一個郵箱
		$phpmailer->AddAttachment("$file_dir$filename");
		$phpmailer->Body = '这是由 dhchannel backup_db 功能自动生成的数据库备份.';
		$phpmailer->CharSet = 'UTF-8';
		$phpmailer->ContentType = 'text/plain';
		$phpmailer->FromName = html_entity_decode(get_option('blogname'), ENT_QUOTES);
		$phpmailer->From = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
		$phpmailer->Subject = "数据库备份- $filename";
		; // 寄出
		if($phpmailer->Send())
		{
			unlink($file_dir.$filename);
		}
		else
		{
			echo "糟糕，没有发送出去哦！";
		}
//unlink($file_dir.$filename);
    }
	update_option('dh_backup_db', $now);
}
?>